﻿using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace Mal.Balades.Admin.Services
{
    public interface IAdminService
    {
        void GetVisitsForDashboardAsync();
        void GetVisitsForDashboardAsync(object userState);
        event ServiceResponse<ReadOnlyCollection<IVisitDashboard>> GetVisitsForDashboardCompleted;

        void GetVisitAsync(int visitId);
        void GetVisitAsync(int visitId, object userState);
        event ServiceResponse<IVisitAdmin> GetVisitCompleted;

        void GetVisitPicturesAsync(int visitId);
        void GetVisitPicturesAsync(int visitId, object userState);
        event ServiceResponse<ReadOnlyCollection<IPicture>> GetVisitPicturesCompleted;

        void GetVisitInformationsAsync(int visitId);
        void GetVisitInformationsAsync(int visitId, object userState);
        event ServiceResponse<ReadOnlyCollection<IInformation>> GetVisitInformationsCompleted;

        void SaveVisitAsync(ISaveVisitObject visitToSave);
        void SaveVisitAsync(ISaveVisitObject visitToSave, object userState);
        event ServiceResponse<ISaveVisitResult> SaveVisitCompleted;

        void GetCategoriesAsync();
        void GetCategoriesAsync(object userState);
        event ServiceResponse<List<ICategory>> GetCategoriesCompleted;

        void GetInformationTypesAsync();
        void GetInformationTypesAsync(object userState);
        event ServiceResponse<List<IInformationType>> GetInformationTypesCompleted;

        void GetPictureTypesAsync();
        void GetPictureTypesAsync(object userState);
        event ServiceResponse<List<IPictureType>> GetPictureTypesCompleted;

        void GetFeedsAsync();
        void GetFeedsAsync(object userState);
        event ServiceResponse<ReadOnlyCollection<IFeed>> GetFeedsCompleted;

        void UpdateFeedItemsAsync(int feedId);
        void UpdateFeedItemsAsync(int feedId, object userState);
        event ServiceResponse<bool> UpdateFeedItemsCompleted;

        void Cleanup();
    }
}
